

// This file was generated automatically. See README.md.
// DO NOT MODIFY IT MANUALLY.

package com.github.xyzboom.codesmith.ir.visitors

import com.github.xyzboom.codesmith.ir.IrElement
import com.github.xyzboom.codesmith.ir.IrNamedElement
import com.github.xyzboom.codesmith.ir.IrParameterList
import com.github.xyzboom.codesmith.ir.IrProgram
import com.github.xyzboom.codesmith.ir.containers.*
import com.github.xyzboom.codesmith.ir.declarations.*
import com.github.xyzboom.codesmith.ir.expressions.IrBlock
import com.github.xyzboom.codesmith.ir.expressions.IrExpression
import com.github.xyzboom.codesmith.ir.types.*

/**
 * Auto-generated by [com.github.xyzboom.codesmith.tree.generator.printer.VisitorPrinter]
 */
abstract class IrVisitor<out R, in D> {

    abstract fun visitElement(element: IrElement, data: D): R

    open fun visitNamedElement(namedElement: IrNamedElement, data: D): R =
        visitElement(namedElement, data)

    open fun visitProgram(program: IrProgram, data: D): R =
        visitElement(program, data)

    open fun visitDeclaration(declaration: IrDeclaration, data: D): R =
        visitElement(declaration, data)

    open fun visitClassDeclaration(classDeclaration: IrClassDeclaration, data: D): R =
        visitElement(classDeclaration, data)

    open fun visitFunctionDeclaration(functionDeclaration: IrFunctionDeclaration, data: D): R =
        visitElement(functionDeclaration, data)

    open fun visitPropertyDeclaration(propertyDeclaration: IrPropertyDeclaration, data: D): R =
        visitElement(propertyDeclaration, data)

    open fun visitParameter(parameter: IrParameter, data: D): R =
        visitElement(parameter, data)

    open fun visitClassContainer(classContainer: IrClassContainer, data: D): R =
        visitElement(classContainer, data)

    open fun visitFuncContainer(funcContainer: IrFuncContainer, data: D): R =
        visitElement(funcContainer, data)

    open fun visitPropertyContainer(propertyContainer: IrPropertyContainer, data: D): R =
        visitElement(propertyContainer, data)

    open fun visitTypeParameterContainer(typeParameterContainer: IrTypeParameterContainer, data: D): R =
        visitElement(typeParameterContainer, data)

    open fun visitExpressionContainer(expressionContainer: IrExpressionContainer, data: D): R =
        visitElement(expressionContainer, data)

    open fun visitParameterList(parameterList: IrParameterList, data: D): R =
        visitElement(parameterList, data)

    open fun visitType(type: IrType, data: D): R =
        visitElement(type, data)

    open fun visitNullableType(nullableType: IrNullableType, data: D): R =
        visitElement(nullableType, data)

    open fun visitTypeParameter(typeParameter: IrTypeParameter, data: D): R =
        visitElement(typeParameter, data)

    open fun visitClassifier(classifier: IrClassifier, data: D): R =
        visitElement(classifier, data)

    open fun visitSimpleClassifier(simpleClassifier: IrSimpleClassifier, data: D): R =
        visitElement(simpleClassifier, data)

    open fun visitParameterizedClassifier(parameterizedClassifier: IrParameterizedClassifier, data: D): R =
        visitElement(parameterizedClassifier, data)

    open fun visitExpression(expression: IrExpression, data: D): R =
        visitElement(expression, data)

    open fun visitBlock(block: IrBlock, data: D): R =
        visitElement(block, data)
}
